package com.bulletelc.apollopre.framework;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * author: lhl
 * time  : 2017/10/15
 * desc  : fragment基类
 */

public abstract class BaseFragment extends Fragment implements BaseInterface {

    protected BaseActivity baseActivity;

    protected View v;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        baseActivity = (BaseActivity) getActivity();
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        goToLoginActivity();
        // 为空时才创建界面，否则会重复创建
        if (v == null) {
            v = inflater.inflate(getLayoutRes(), container, false);
            assignViews();
            initData(savedInstanceState);
            setListener();
        } else {
            /**
             *  避免mRoot重复添加到多个父控件导致出错，这个在高版本的v4包不用写也是可以的，但低版本的v4
             *  包就会有问题如果不写这段代码会报一个异常的
             *  目的是兼容低版本*/
            ViewGroup parent = (ViewGroup) v.getParent();
            if (parent!=null) {
                parent.removeView(v);
            }
        }
        return v;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    /**
     * 跳转到登录界面,钩子方法,有需要可重写,重写时须在方法最后加上 return
     */
    protected void goToLoginActivity() {
    }

    /**
     * 初始化控件
     * @param toolbar
     * @param title
     */
    protected void initToolbar(Toolbar toolbar, String title) {
       toolbar.setTitle(title);
       baseActivity.setSupportActionBar(toolbar);
    }
    /**
     * 初始化控件
     * @param toolbar
     * @param resID 字符串资源ID
     */
    protected void initToolbar(Toolbar toolbar, int resID) {
        initToolbar(toolbar,getResources().getString(resID));
    }


    /**
     * 查找子控件，可省类型强转装换
     * @param id
     * @param <T>
     * @return
     */
    protected <T extends View> T findView(int id){
        T view = (T) v.findViewById(id);
        return view;
    }
}
